Skip to content

Season 2a server operations (part A) - #13

Merged
pietechsolution merged 15 commits into
mainfrom
season-2a-server
Nov 11, 2026
Merged

pietechsolution merged 15 commits into
mainfrom
season-2a-server

Conversation

@pietechsolution

Copy link
Copy Markdown
Contributor

Draft for CI only. Do not merge: the season 2a SDK changes merge and release together at the end of 2a, on the owner's yes. No version bump, no tag.

What this adds (71 operations)

  • client.seasons: the 32 missing Season operations (48 → 80), named by operationId (create_season_performances, refund_season_order, export_season_holders_csv, …).
  • New client.holders (11): list_customers and the holder, ticket and transfer operations.
  • New client.orders (9): /v1/orders… and /v1/events/{eventKey}/orders….
  • client.events gains the 14 event sales operations (buyer checkout, payment gateway, sales readiness/preflight/transition, booking fee, discount codes).
  • New client.event_series (5).
  • Transport: an internal get_text for the three CSV exports (raw String back, Accept: text/csv); request now builds its URL and headers through two small private helpers it shares with get_text.
  • 22 new header-replay operations send an Idempotency-Key (caller's, or generated and reused on retry); all other new mutations send none and are single-attempt.
  • Webhooks::EVENT_NAMES gains the 10 series, order, customer and season ticket transfer events (8 → 18).
  • release.yml: the gem now ships 16 files (3 new lib/seatlayer/*.rb), so the expected count goes 13 → 16.
  • README (counts, replay list 14 → 36, API surface table, the "Deliberately not in this SDK" bullets this makes untrue) and an Unreleased CHANGELOG entry.

Local checks

  • ruby -wc on every changed .rb file: Syntax OK, no warnings (this Mac has Ruby 2.6; rubocop and rspec need 3.0+, so CI is the real gate).
  • The specs run on Ruby 2.6 through a small RSpec stand-in, with channels.rb stubbed (it uses 3.0-only endless defs): every new example passes except one, and that one fails only because Ruby 2.6 treats an empty Hash as keyword arguments. The existing examples still pass, apart from those that need the stubbed Channels or OpenSSL.secure_compare, which Ruby 2.6 lacks.
  • Route coverage (coverage.mjs --only ruby): ruby: 71/71 sent.
  • Line length ≤ 110 and continuation alignment checked by script against the existing patterns.

…tle (2.16c)

createEventSeries takes fromEventKey: an event already set up becomes the first date under its own key and every other date is a copy of it; name and chartKey are then left out. Every date of a series carries the series' plain name. Matches seatmap slice 2.16c.
Adds releaseSeasonLapsedOffers (POST /v1/seasons/{key}/renewal-offers/release-lapsed, no body, header replay, 202 with the job). retrieveSeasonHostedRenewals pages with cursor and limit (1-500) and answers nextCursor, and listSeasonRenewalOffers pages the same way (1-100). createSeasonRenewalOffers answers 201 {offers} for 100 contracts or fewer and 202 {job, batchId} above that. The bring-across (createSeasonHolderImportFromSeason) answers 202 with a holder_import job above 100 holders. Renewal emails take up to 20,000 offer ids; above that, 422 too_many_offer_ids.
…e_abandoned (p2b)

The public API changes in p2b (b88ed794e..ee7df2921): SeatLayer::Seasons.date_cancel_void_job_id names the date_cancel_void job a date cancel starts (sbj_void_<amendmentId>, followed with retrieve_season_bulk_job; season.ticket.voided says date_cancelled); SeatLayer::Seasons.holder_import_rows_per_call sizes a create_season_holder_import call by its dates (a package now holds 2 to 50; a call over it raises ValidationError invalid_rows with maxRows); update_season's singleTicketDates may carry jobRefused, and an exact retry is not applied twice; create_event_series documents 409 create_abandoned.
…b audit)

updateEventSeries sends only the prices that change: each date keeps its
own price for every category or tier left out. A season's null transfer
or return cut-off means the club default from Settings > Ticket site, or
until the date starts when the club has none. Holder transfers and
returns through the secret key are not stopped by the club's customer
switches; cut-offs still apply.
…part C)

A date its season cancelled never opens again: moving its sales to
testable or live, or reopening it, answers 409 season_date_cancelled,
and an event series "sales on" leaves it closed as a failed item of the
job (season_date_cancelled; not in failedDates). A cancelled date can't
be moved, postponed, replaced or marked as taken place: 409
performance_cancelled.
@pietechsolution
pietechsolution marked this pull request as ready for review November 11, 2026 10:14
@pietechsolution
pietechsolution merged commit 6f610e8 into main Nov 11, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant